package com.cn.wanxi.io;

import com.cn.wanxi.dto.NavModelDto;
import com.cn.wanxi.model.NavModel;
import com.cn.wanxi.util.Common;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 1.写入记事本
 * 2.读取记事本数据
 * 3.和页面对应的对象NavModelDto
 * 4.封装得到的数据封装到NavModelDto
 */
public class NavIO {
    private String path = "D:\\step-three\\nav.txt";

    /**
     * 权限修饰符   特征修饰符  返回类型  方法名称（参数类型 参数名字） throws  异常
     * {
     * 执行体
     * return 返回值
     * }
     * public static  String getName(String name,Integer age) throws Exception{
     * return "aaa";
     * }
     * <p>
     * 类的执行顺序：静态方法块-->普通方法块-->构造方法 -->静态的属性-->普通的属性
     *     public NavIO() {
     *
     *     }
     *
     *     private static CompanyModelIO companyModelIO = new CompanyModelIO();
     *
     *
     *     static {
     *
     *     }
     */ {
        File file = new File(path);//定义文件路径，返回的是一个文件
        /**
         * 现在是将数据写入记事本，所以用到的是write
         */
        try {
            OutputStream outputStream = new FileOutputStream(file);//用字节流
            NavModel navModel = new NavModel();
            //这里面的参数是btye数组，但是我们现在是一个string数组，需要转换
            //Arrays.toString();
            outputStream.write(Arrays.toString(navModel.navHref).getBytes());
            //我们需要将数据进行有效的隔开。这里我们通过@@隔开
            outputStream.write("@@".getBytes());

            outputStream.write(Arrays.toString(navModel.navTitle).getBytes());

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通过记事本的数据封装到navList
     *
     * @return 封装好的导航数据
     */
    public List<NavModel> getNavListFromNote() {
        /**
         *
         * 1.现在基本上没有任何数据 ，需要我们提前将数据存入记事本
         *      加载类的时候去存入记事本：1）在构造函数里面写2）在方法块里面写
         *      1.以方法块为例；
         *      将数据存入记事本，首先需要一个路径
         *          1）定义文件 File file=new File(path);
         *          2）定义字节流  OutputStream outputStream=new FileOutputStream(file);
         *           3）拿到数据NavModel
         *           4）将数据写入记事本outputStream.write
         *           注意：因为我们现在这两个数据是数组，所以需要进行转换Arrays.toString
         *           需要用固定字符隔开，为了去读的时候开业更加方便
         *
         *  断言
         */
//        File file = new File(path);
        List<NavModel> navList = new ArrayList<>();//定义一个集合，用于传递到页面的数据，现在数据为空
//        try {
//            Reader reader = new FileReader(file);//字符流进行读取，如果是字节流会出现乱码
//            int leng = 0;
//            StringBuilder stringBuilder = new StringBuilder();//拼接字符串
//            //String 和 StringBuilder
//
//            //因为我们不知道读取的文件数据有多少，所以用while
//            while ((leng = reader.read()) != -1) {//read()每一次读取一个字符，所以需要将所有字符进行拼接stringBuilder
//                stringBuilder.append((char) leng);
//            }

        //最后我们拿到的stringBuilder就是我们需要的数据,将数据进行封装
        String[] strings = Common.readNote(path).split("@@");//通过@@符号得到需要的数据
        NavModelDto navModelDto = new NavModelDto();
//            navModelDto.setHref(strings[0]); //得到链接[/home, /company, /news, /product, /online, /callus]
//            navModelDto.setTitle(strings[1]);
        String href = strings[0];
        String title = strings[1];//得到标题[网站首页, 公司介绍, 新闻动态, 产品展示, 在线留言, 联系我们]
//            href = href.replace("[", "");//替换
//            href = href.replace("]", "");
//            title = title.replace("[", "");
//            title = title.replace("]", "");
        href = Common.replace(href, "", "[", "]");
        title = Common.replace(title, "", "[", "]");

//            String[] hrefs = navModelDto.getHref().split(",");//将上面href用逗号隔开分离成的数组
//            String[] titles = navModelDto.getTitle().split(",");
        navModelDto.setHref(href.split(","));
        navModelDto.setTitle(title.split(","));

        navList = new NavModel().getNavList(navModelDto.getHref(), navModelDto.getTitle());


        return navList;
    }

}
